Introduction: Ada9X and the GNAT Project

The Ada community has proposed a number of explanations for the relative lack of success of Ada vis-a-vis of C and more recently C<#52#>++<#52#>, in spite of the clear superiority of Ada as a language for software engineering. At least one reason for the slow spread of Ada through the software community has been the absence of a cheap (or even free) high-quality compiler that can run on a variety of platforms and is usable both for training and serious software construction. The issue of training is a particularly critical one: students (and universities) cannot afford expensive programming environments, and the choice of programming languages for teaching is often ruled by cost considerations. The widespread use of C is in part due to the ubiquitousness of UNIX. The recent successes of C<#53#>++<#53#> are at least in part attributable to the availability of Turbo-C<#54#>++<#54#> on PC's, and of course G<#55#>++<#55#> (the GCC C<#56#>++<#56#> compiler) on UNIX platforms.

The imminent introduction of Ada9X presents us with a new opportunity. The language [#rm-9x##1###] offers up-to-date tools for object-oriented programming, for information systems, for distributed systems, for interfacing with other languages, for hierarchical system decomposition, etc. If a free, high-quality compiler were to appear at the same time as the standardization of the language is completed, it would assist considerably in spreading the knowledge of the new language, and in encouraging comparisons with existing languages (in which we can expect Ada9X to show its superiority).

The GNAT project aims to produce such a compiler. GNAT (an acronym for GNU NYU Ada Translator), is a front-end and runtime system for Ada9X that uses the successful GCC back-end as a retargettable code generator. GNAT is thus part of the GNU software, and is distributed according to the guidelines of the Free Software Foundation. GNAT will be a complete compiler, but will not be validaded by New York University. In fact, GNAT will be available before validation procedures for Ada9X compilers are completed, because timeliness is crucial to its mission. Preliminary versions of GNAT, albeit very incomplete, are already being distributed, and are contributing to the diffusion of the language. The availability of sources for the system is allowing language designers and implementors to participate in the writing of GNAT itself. Compiler constructors are also benefiting from the existence of a reference implementation for new language constructs. We give below information on how to obtain GNAT and how to participate in the community effort of completing and improving it.

The next section describes the GCC compiler system. Next we summarize the structure of GNAT. Following sections discuss some details of the front-end and code generator. We then present what is probably the most innovative aspect of GNAT, namely the library mechanism. We then discuss the binder, and conclude with a status report on the completion and performance of the system.